package util

import (
	"crypto/md5"
	"encoding/hex"
	"fmt"
	"path/filepath"
	"regexp"
	"strconv"
	"strings"

	"github.com/google/uuid"
)

// HexToRGB 将十六进制颜色代码转换为RGB元组（范围0.0-1.0）
func HexToRGB(hexColor string) (float64, float64, float64, error) {
	hexColor = strings.TrimPrefix(hexColor, "#")
	if len(hexColor) == 3 {
		// 处理简写形式（例如 #fff）
		hexColor = string(hexColor[0]) + string(hexColor[0]) + string(hexColor[1]) + string(hexColor[1]) + string(hexColor[2]) + string(hexColor[2])
	}

	if len(hexColor) != 6 {
		return 0, 0, 0, fmt.Errorf("无效的十六进制颜色代码: %s", hexColor)
	}

	r, err := strconv.ParseInt(hexColor[0:2], 16, 64)
	if err != nil {
		return 0, 0, 0, fmt.Errorf("解析R值失败: %v", err)
	}

	g, err := strconv.ParseInt(hexColor[2:4], 16, 64)
	if err != nil {
		return 0, 0, 0, fmt.Errorf("解析G值失败: %v", err)
	}

	b, err := strconv.ParseInt(hexColor[4:6], 16, 64)
	if err != nil {
		return 0, 0, 0, fmt.Errorf("解析B值失败: %v", err)
	}

	return float64(r) / 255.0, float64(g) / 255.0, float64(b) / 255.0, nil
}

// IsWindowsPath 检查路径是否是Windows路径
func IsWindowsPath(path string) bool {
	// 检查是否是Windows绝对路径（例如C:\path\to\file）
	regex := regexp.MustCompile(`^[a-zA-Z]:\\`)
	return regex.MatchString(path)
}

// URLToHash 将URL转换为哈希值
func URLToHash(url string) string {
	hash := md5.Sum([]byte(url))
	return hex.EncodeToString(hash[:])
}

// GenerateUUID 生成UUID
func GenerateUUID() string {
	return uuid.New().String()
}

// GenerateDraftURL 生成草稿URL
func GenerateDraftURL(draftDomain, previewRouter, draftID string) string {
	return fmt.Sprintf("%s%s?draft_id=%s", draftDomain, previewRouter, draftID)
}

// GetFileExtension 获取文件扩展名
func GetFileExtension(path string) string {
	return strings.ToLower(filepath.Ext(path))
}

// GetFileName 获取文件名（不含扩展名）
func GetFileName(path string) string {
	base := filepath.Base(path)
	extension := filepath.Ext(base)
	return base[0 : len(base)-len(extension)]
}
